package org.jsola.hr.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.jsola.core.vo.BaseVO;
import org.jsola.hr.dto.AttendAdvancedDTO;
import org.jsola.hr.dto.attendschedule.AttendPeriodDTO;

import java.util.ArrayList;
import java.util.List;

/**
 * @author wxz
 */
@EqualsAndHashCode(callSuper = true)
@ApiModel(description = "【公共考勤】详情展示对象")
@Data
public class PunchCommonVO extends BaseVO {

    private static final long serialVersionUID = 1L;

    /** 今日是否需要考勤;true-是,false-否 */
    private Boolean isTodayAttend;

    /** 是否白名单;true-是,false-否 */
    private Boolean isWhitelist;

    /** 是否打卡时间段内;true-是,false-否 */
    private Boolean isInPunchTime;

    @ApiModelProperty(notes = "是否特殊日期", example = "true-是,false-否")
    private Boolean isSpecialDate;

    /** 特殊日期是否需要打卡;true-是,false-否 */
    private Boolean isNeedPunchOfDaily;

    /** 考勤时段 */
    private List<AttendPeriodDTO> periodList = null;

    /** 考勤周 */
    private List<String> workWeekList = null;

    /** 考勤高级设置 */
    private AttendAdvancedDTO advanced = null;

    /** 上班时间(HH:mm) */
    private String onWorkTime;

    /** 下班时间(HH:mm) */
    private String offWorkTime;

    /** 上班还是下班;0-缺卡1-上班打卡,2-下班打卡,3-今日已完成打卡 */
    private Integer workStatus;

    /** 上班打卡或下班打卡是否完成 */
    private Boolean completedWork;

    /** 上班打卡时间 */
    private String onWorkPunchTime;

    /** 下班打卡时间 */
    private String offWorkPunchTime;

    /** 最后下班打卡时间 */
    private String offWorkPunchTimeLast;

    /** 打卡状态 ; 0-异常打卡,1-正常,2-迟到,3-早退 */
    private Integer punchStatus;

    /** 迟到或早退分钟数 */
    private Integer minutes;

    /** 时间段 */
    private String period;

    /** 下班时间 */
    private String endOffWorkTime;

    /** 当日工作时长 */
    private Integer workTime;

    /** 打卡序号 */
    private String punchSerial;

    /**
     * 白名单
     *
     * @return
     */
    public PunchCommonVO buildWhitelist() {

        PunchCommonVO punchCommonVO = new PunchCommonVO();
        // 今日是否需要考勤;true-是,false-否
        punchCommonVO.setIsTodayAttend(false);
        // 是否白名单;true-是,false-否
        punchCommonVO.setIsWhitelist(true);
        // 特殊日期是否需要打卡;true-是,false-否
        punchCommonVO.setIsNeedPunchOfDaily(false);
        // 考勤时段
        punchCommonVO.setPeriodList(new ArrayList<>());
        // 考勤周
        punchCommonVO.setWorkWeekList(new ArrayList<>());
        // 考勤高级设置
        punchCommonVO.setAdvanced(new AttendAdvancedDTO());
        // 上班时间(HH:mm)
        punchCommonVO.setOnWorkTime("");
        // 下班时间(HH:mm)
        punchCommonVO.setOffWorkTime("");
        // 上班还是下班;0-异常打卡1-上班打卡,2-下班打卡,3-今日已完成打卡
        punchCommonVO.setWorkStatus(3);
        // 上班打卡时间
        punchCommonVO.setOnWorkPunchTime("");
        // 下班打卡时间
        punchCommonVO.setOffWorkPunchTime("");
        // 打卡状态 ; 0-缺卡,1-正常,2-迟到,3-早退
        punchCommonVO.setPunchStatus(0);
        // 迟到或早退分钟数
        punchCommonVO.setMinutes(0);

        return punchCommonVO;
    }

    /**
     * 特殊日期
     * @return
     */
    public PunchCommonVO buildSpecial() {

        PunchCommonVO punchCommonVO = new PunchCommonVO();
        // 今日是否需要考勤;true-是,false-否
        punchCommonVO.setIsTodayAttend(false);
        // 是否白名单;true-是,false-否
        punchCommonVO.setIsWhitelist(false);
        // 是否特殊日期 - true
        punchCommonVO.setIsSpecialDate(true);
        // 特殊日期是否需要打卡;true-是,false-否
        punchCommonVO.setIsNeedPunchOfDaily(false);
        // 考勤时段
        punchCommonVO.setPeriodList(new ArrayList<>());
        // 考勤周
        punchCommonVO.setWorkWeekList(new ArrayList<>());
        // 考勤高级设置
        punchCommonVO.setAdvanced(new AttendAdvancedDTO());
        // 上班时间(HH:mm)
        punchCommonVO.setOnWorkTime("");
        // 下班时间(HH:mm)
        punchCommonVO.setOffWorkTime("");
        // 上班还是下班;0-异常打卡1-上班打卡,2-下班打卡,3-今日已完成打卡
        punchCommonVO.setWorkStatus(3);
        // 上班打卡时间
        punchCommonVO.setOnWorkPunchTime("");
        // 下班打卡时间
        punchCommonVO.setOffWorkPunchTime("");
        // 打卡状态 ; 0-缺卡,1-正常,2-迟到,3-早退
        punchCommonVO.setPunchStatus(0);
        // 迟到或早退分钟数
        punchCommonVO.setMinutes(0);

        return punchCommonVO;
    }

    /**
     * 是否考勤日
     *
     * @return
     */
    public PunchCommonVO buildTodayAttend() {

        PunchCommonVO punchCommonVO = new PunchCommonVO();
        // 今日是否需要考勤;true-是,false-否
        punchCommonVO.setIsTodayAttend(false);
        // 是否白名单;true-是,false-否
        punchCommonVO.setIsWhitelist(false);
        // 特殊日期是否需要打卡;true-是,false-否
        punchCommonVO.setIsNeedPunchOfDaily(false);
        // 考勤时段
        punchCommonVO.setPeriodList(new ArrayList<>());
        // 考勤周
        punchCommonVO.setWorkWeekList(new ArrayList<>());
        // 考勤高级设置
        punchCommonVO.setAdvanced(new AttendAdvancedDTO());
        // 上班时间(HH:mm)
        punchCommonVO.setOnWorkTime("");
        // 下班时间(HH:mm)
        punchCommonVO.setOffWorkTime("");
        // 上班还是下班;0-异常打卡1-上班打卡,2-下班打卡,3-今日已完成打卡
        punchCommonVO.setWorkStatus(3);
        // 上班打卡时间
        punchCommonVO.setOnWorkPunchTime("");
        // 下班打卡时间
        punchCommonVO.setOffWorkPunchTime("");
        // 打卡状态 ; 0-缺卡,1-正常,2-迟到,3-早退
        punchCommonVO.setPunchStatus(0);
        // 迟到或早退分钟数
        punchCommonVO.setMinutes(0);

        return punchCommonVO;
    }

    /**
     * 构建不需要打卡的对象
     *
     * @return
     */
    public PunchCommonVO buildNotNeedAttend() {

        PunchCommonVO punchCommonVO = new PunchCommonVO();
        // 今日是否需要考勤;true-是,false-否
        punchCommonVO.setIsTodayAttend(false);
        // 是否白名单;true-是,false-否
        punchCommonVO.setIsWhitelist(false);
        // 特殊日期是否需要打卡;true-是,false-否
        punchCommonVO.setIsNeedPunchOfDaily(false);
        // 考勤时段
        punchCommonVO.setPeriodList(new ArrayList<>());
        // 考勤周
        punchCommonVO.setWorkWeekList(new ArrayList<>());
        // 考勤高级设置
        punchCommonVO.setAdvanced(new AttendAdvancedDTO());
        // 上班时间(HH:mm)
        punchCommonVO.setOnWorkTime("");
        // 下班时间(HH:mm)
        punchCommonVO.setOffWorkTime("");
        // 上班还是下班;0-异常打卡1-上班打卡,2-下班打卡,3-今日已完成打卡
        punchCommonVO.setWorkStatus(0);
        // 上班打卡时间
        punchCommonVO.setOnWorkPunchTime("");
        // 下班打卡时间
        punchCommonVO.setOffWorkPunchTime("");
        // 打卡状态 ; 0-缺卡,1-正常,2-迟到,3-早退
        punchCommonVO.setPunchStatus(0);
        // 迟到或早退分钟数
        punchCommonVO.setMinutes(0);

        return punchCommonVO;
    }



}
